package leetcode.editor.cn;

import java.util.ArrayList;

/**
  * 题目Id：283
  * 题目：移动零
  * 日期：2023-12-12 17:08:38
*/
//给定一个数组 nums，编写一个函数将所有 0 移动到数组的末尾，同时保持非零元素的相对顺序。 
//
// 请注意 ，必须在不复制数组的情况下原地对数组进行操作。 
//
// 
//
// 示例 1: 
//
// 
//输入: nums = [0,1,0,3,12]
//输出: [1,3,12,0,0]
// 
//
// 示例 2: 
//
// 
//输入: nums = [0]
//输出: [0] 
//
// 
//
// 提示: 
// 
//
// 
// 1 <= nums.length <= 10⁴ 
// -2³¹ <= nums[i] <= 2³¹ - 1 
// 
//
// 
//
// 进阶：你能尽量减少完成的操作次数吗？ 
//
// Related Topics 数组 双指针 👍 2262 👎 0


public class MoveZeroes {
    public static void main(String[] args) {
        Solution solution = new MoveZeroes().new Solution();
        solution.moveZeroes(new int[]{0,1,0,3,12});
        
        System.out.println("Hello world");
    }
    //leetcode submit region begin(Prohibit modification and deletion)

    /**
     *
     */
    class Solution {
    public void moveZeroes(int[] nums) {


        /**
         * 法一：不行
         */
//        for (int i = 0; i < nums.length; i++) {
//            if(nums[i]==0){
//                //移动
//                for (int j = i; j <nums.length-1 ; j++) {
//                    nums[j] = nums[j+1];
//                }
//                //最后一位设置为0
//                nums[nums.length-1]=0;
//                i--;
//            }
//
//        }

        /**
         * 两次遍历：双指针：指针a遍历数据，指针b指向
         */
        if(nums==null){
            return;
        }
        int b=0;
        for (int i = 0; i < nums.length; i++) {
            if(nums[i]!=0){
                nums[b++]=nums[i];
            }
        }
        for (int i = b; i <nums.length ; i++) {
            nums[i]=0;
        }








    }
}
//leetcode submit region end(Prohibit modification and deletion)

} 
